package com.xhsemoticonskeyboard.my_diy_keyboard;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.sj.emoji.EmojiBean;
import com.xhsemoticonskeyboard.R;
import com.xhsemoticonskeyboard.activity.adapter.SimpleChatBaseQuickAdapter;
import com.xhsemoticonskeyboard.common.Constants;
import com.xhsemoticonskeyboard.common.SimpleCommonUtils;
import com.xhsemoticonskeyboard.common.adapter.ChattingListAdapter;
import com.xhsemoticonskeyboard.common.data.ImMsgBean;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import sj.keyboard.data.EmoticonEntity;
import sj.keyboard.interfaces.EmoticonClickListener;
import sj.keyboard.widget.EmoticonsEditText;
import sj.keyboard.widget.FuncLayout;

import static android.widget.AbsListView.OnScrollListener.SCROLL_STATE_FLING;
import static android.widget.AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL;
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;

//import butterknife.Bind;

public class My_Diy_KeyBoardActivity extends AppCompatActivity implements FuncLayout.OnFuncKeyBoardListener {

    @BindView(R.id.toolbar)
    LinearLayout toolbar;
    @BindView(R.id.rv_chat)
    RecyclerView rvChat;
    @BindView(R.id.ek_bar)
    My_Diy_EmoticonsKeyBoard ekBar;
    private List<ImMsgBean> beanList=new ArrayList<>();
    private My_Diy_ChatBaseQuickAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_diy_keyboard_activity);
        ButterKnife.bind(this);
        //toolbar.setTitle("Simple Chat userdef Keyboard");
        initView();
    }

    private void initView() {
        initEmoticonsKeyBoardBar();
        initListView();
    }

    private void initEmoticonsKeyBoardBar() {


        /** 默认的表情列表页*/
//        SimpleCommonUtils.initEmoticonsEditText(ekBar.getEtChat());
        /** 将表情包 添加到键盘布局的表情位置 , 和表情的点击事件 */
//        ekBar.setAdapter(SimpleCommonUtils.getCommonAdapter(this, emoticonClickListener));


        /** 使用自定义的 默认的表情列表页 */
        My_Diy_EmotionsUtils.initEmoticonsEditText(ekBar.getEtChat());
        /** 使用自定义的 将表情包 添加到键盘布局的表情位置 , 和表情的点击事件 */
        ekBar.setAdapter(My_Diy_EmotionsUtils.getCommonAdapter(this, emoticonClickListener));



        /** 添加 功能页面 的按钮事件监听 */
        ekBar.addOnFuncKeyBoardListener(this);
        /** 重写实现 功能页面 的布局 */
        ekBar.addFuncView(new My_Diy_AppsGridView(this));

        /** 输入框 EditView 的字符串长度变化事件监听实现 */
        ekBar.getEtChat().setOnSizeChangedListener(new EmoticonsEditText.OnSizeChangedListener() {
            @Override
            public void onSizeChanged(int w, int h, int oldw, int oldh) {
                scrollToBottom();
            }
        });

        /** 发送按钮 的点击事件实现 -- 发送文字消息 */
        ekBar.getBtnSend().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OnSendBtnClick(ekBar.getEtChat().getText().toString());
                ekBar.getEtChat().setText("");
            }
        });

        /** 表情下面的toobar 增加 最前面的 固定的 item*/
//        ekBar.getEmoticonsToolBarView().addFixedToolItemView(false, R.mipmap.icon_add, null, new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Toast.makeText(My_Diy_KeyBoardActivity.this, "ADD", Toast.LENGTH_SHORT).show();
//            }
//        });

        /** 表情下面的 toobar 增加 最后面的 item*/
//        ekBar.getEmoticonsToolBarView().addToolItemView(R.mipmap.icon_setting, new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Toast.makeText(My_Diy_KeyBoardActivity.this, "SETTING", Toast.LENGTH_SHORT).show();
//            }
//        });
    }

    /** 实现 单个表情的点击事件监听  */
    EmoticonClickListener emoticonClickListener = new EmoticonClickListener() {
        @Override
        public void onEmoticonClick(Object o, int actionType, boolean isDelBtn) {

            if (isDelBtn) { /** 删除按钮 */
                SimpleCommonUtils.delClick(ekBar.getEtChat());
            } else {/** 根据收到的 数据类型 处理 */
                if(o == null){
                    return;
                }
                /** 如果是 大图类型  EMOTICON_CLICK_BIGIMAGE */
                if(actionType == Constants.EMOTICON_CLICK_BIGIMAGE){
                    if(o instanceof EmoticonEntity){ /** 表情实体 */
                        OnSendImage(((EmoticonEntity)o).getIconUri()); /** 发送 大图表情 */
                    }
                } else { /** 如果是 字符类型  */
                    String content = null;
                    if(o instanceof EmojiBean){ /** 表情 */
                        content = ((EmojiBean)o).emoji;
                    } else if(o instanceof EmoticonEntity){ /** 表情实体 */
                        content = ((EmoticonEntity)o).getContent();
                    }

                    if(TextUtils.isEmpty(content)){
                        return;
                    }
                    int index = ekBar.getEtChat().getSelectionStart();/** 获取当前输入框的光标位置 */
                    Editable editable = ekBar.getEtChat().getText();
                    editable.insert(index, content); /** 将字符插入到光标位置 */
                }
            }
        }
    };

    private void initListView() {
        beanList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            ImMsgBean bean = new ImMsgBean();
            bean.setContent("Test:" + i);
            beanList.add(bean);
        }

        adapter=new My_Diy_ChatBaseQuickAdapter(beanList);
        rvChat.setLayoutManager(new LinearLayoutManager(this));
        rvChat.setAdapter(adapter);
        scrollToBottom();

        /** 列表滑动 重置/影藏 键盘 */
        rvChat.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                switch (newState) {
                    case SCROLL_STATE_FLING:
                        break;
                    case SCROLL_STATE_IDLE:
                        break;
                    case SCROLL_STATE_TOUCH_SCROLL:
                        ekBar.reset();
                        break;
                }
            }
        });
        /** 列表触摸 重置/影藏 键盘 */
        rvChat.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                ekBar.reset();
                return false;
            }
        });
    }

    /** 发送文字信息 */
    private void OnSendBtnClick(String msg) {
        if (!TextUtils.isEmpty(msg)) {
//            ImMsgBean bean = new ImMsgBean();
//            bean.setContent(msg);
//            chattingListAdapter.addData(bean, true, false);
//            scrollToBottom();
            addMsg(msg);
        }
    }

    /** 发送 大图表情  的方式 */
    private void OnSendImage(String image) {
        if (!TextUtils.isEmpty(image)) {
            OnSendBtnClick("[img]" + image);
        }
    }

    /** 将 信息 添加到列表 */
    void addMsg(String msg){
        beanList.add(new ImMsgBean(msg));
        adapter.notifyDataSetChanged();
        scrollToBottom();
    }

    /** 活动 到列表底部 */
    private void scrollToBottom() {
        rvChat.scrollToPosition(beanList.size()-1);
//        rvChat.requestLayout();
//        rvChat.post(new Runnable() {
//            @Override
//            public void run() {
//                rvChat.setSelection(rvChat.getBottom());
//            }
//        });
    }

    @Override
    public void OnFuncPop(int height) {
        scrollToBottom();
    }

    @Override
    public void OnFuncClose() { }

    @Override
    protected void onPause() {
        super.onPause();
        ekBar.reset();
    }
}
